package com.uvnos4j.matilda.system.error;

import cn.hutool.core.util.StrUtil;
import com.uvnos4j.matilda.commons.exception.IException;
import lombok.Getter;

/**
 * 系统管理异常
 * <p>
 * Description:系统管理异常定义
 * </p>
 *
 * @author Guo.wl
 * @version v1.0.0
 * @see com.uvnos4j.matilda.system.error
 * @since 2020-03-29 10:29:06
 */
@Getter
public enum SystemError implements IException {
    // 系统异常：用户名重复
    USER_NAME_REPEAT("0100101", "用户名重复"),
    // 系统异常：邮箱重复
    USER_EMAIL_REPEAT("0100102", "邮箱重复"),
    // 系统异常：要操作的用户不存在
    USER_NO_EXIST("0100103", "要操作的用户不存在"),
    // 系统异常：用户密码错误
    USER_PASS_ERROR("0100104", "用户密码错误"),

    // 系统异常：角色英文名重复
    ROLE_ENNAME_REPORT("0100201", "角色英文名重复"),
    // 系统异常：要操作的角色不存在
    ROLE_NO_EXIST("0100202", "要操作的角色不存在"),

    // 系统异常：同一父权限下存在相同名称的权限点
    ACL_REPEAT_AT_SAME_PARENT("0100301", "同一父权限下存在相同名称的权限点"),
    // 系统异常：待操作的权限不存在。id：{}。
    ACL_NO_EXIST("0100302", "待操作的权限不存在。id：{}。"),
    // 系统异常：权限[{}]下含有子权限无法删除。
    ACL_HAS_CHILDREN("0100303", "权限[{}]下含有子权限无法删除。"),
    // 系统异常：上级权限不能是自身
    ACL_SAME_AS_PARENT("0100304", "上级权限不能是自身"),

    // 系统异常：同一上级部门下存在相同名称的部门
    DEPT_REPORT_AT_SAME_PARENT("0100401", "同一上级部门下存在相同名称的部门"),
    // 系统异常：要操作的部门不存在。id：{}。
    DEPT_NO_EXIST("0100402", "要操作的部门不存在。id：{}。"),
    // 系统异常：部门[{}]下含有子部门无法删除。
    DEPT_HAS_CHILDREN("0100403", "部门[{}]下含有子部门无法删除。"),
    // 系统异常：部门[{}]下含有用户无法删除。
    DEPT_HAS_USER("0100404", "部门[{}]下含有用户无法删除。"),
    // 系统异常：上级部门不能是自身
    DEPT_SAME_AS_PARENT("0100405", "上级部门不能是自身"),

    // 系统异常：同一字典类型下存在相同名称的字典。
    DICT_REPEAT_AT_SAME_TYPE("0100501", "同一字典类型下存在相同名称的字典。"),
    // 系统异常：要操作的字典不存在
    DICT_NO_EXIST("0100502", "要操作的字典不存在。");

    private String code;

    private String message;

    SystemError(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public void setMessage(Object... args) {
        this.message = StrUtil.format(message, args);
    }

}